package com.xuyl.controller.utils;

import com.xuyl.constant.MessageCode;
import com.xuyl.entity.Result;
import com.xuyl.exception.BusinessException;
import com.xuyl.exception.SystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author nisemono
 * @date 2023-02-27 20:56
 */
@Slf4j
@RestControllerAdvice
public class ProjectExceptionAdvice {
    /**
     * 系统健壮性不足产生异常，及时处理
     *
     * @param ex
     * @return
     */
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex) {
        //记录日志
        log.error(ex.getMessage());
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return new Result(false, ex.getCode(), ex.getMessage());
    }

    /**
     * 用户误操作产生的异常
     *
     * @param ex
     * @return
     */
    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex) {
        // 用户操作异常，返回消息给用户看就行
        return new Result(false, ex.getCode(), ex.getMessage());
    }

    /**
     * 系统本身之外的异常，开发人员和运维都要处理
     *
     * @param ex 异常信息
     * @return 结果
     */
    @ExceptionHandler(Exception.class)
    public Result doOtherException(Exception ex) {
        //记录日志
        log.error(ex.getMessage());
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return new Result(false, MessageCode.SYSTEM_UNKNOW_ERR, "系统繁忙，请稍后再试！");
    }
}
